<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>NumPy</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/NumPy"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-NumPy rootpage-NumPy skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">NumPy</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */
.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}
/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent"><tbody><tr><th colspan="2" class="infobox-above summary">NumPy</th></tr><tr><td colspan="2" class="infobox-image logo"><span typeof="mw:File"></span></td></tr><tr><td colspan="2" class="infobox-image logo"><div class="infobox-caption">Plot of y=sin(x) function, created with NumPy and <a href="Matplotlib" title="Matplotlib">Matplotlib</a> libraries</div></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Programmer" title="Programmer">Original author(s)</a></th><td class="infobox-data"><a href="Travis_Oliphant" title="Travis Oliphant">Travis Oliphant</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Programmer" title="Programmer">Developer(s)</a></th><td class="infobox-data">Community project</td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Initial release</th><td class="infobox-data">As Numeric, 1995<span style="display: none;"> (<span class="bday dtstart published updated itvstart">1995</span>)</span>; as NumPy, 2006<span style="display: none;"> (<span class="bday dtstart published updated itvstart">2006</span>)</span></td></tr><tr style="display: none;"><td colspan="2" class="infobox-full-data"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_release_life_cycle" title="Software release life cycle">Stable release</a></th><td class="infobox-data"><div style="margin:0px;">2.3.1<sup id="cite_ref-wikidata-0427ffff1a2533c64493114ae899e678d4820b54-v20_1-0" class="reference"><a href="#cite_note-wikidata-0427ffff1a2533c64493114ae899e678d4820b54-v20-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
/ 21 June 2025<span style="display:none"> (<span class="bday dtstart published updated">21 June 2025</span>)</span></div></td></tr><tr style="display:none"><td colspan="2">
</td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Repository_(version_control)" title="Repository (version control)">Repository</a></th><td class="infobox-data"><style data-mw-deduplicate="TemplateStyles:r1126788409">
/* start https://en.wikipedia.org/ */
.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}
/* end https://en.wikipedia.org/ */
</style><div class="plainlist"><ul><li><span class="url"><a rel="nofollow" class="external text" href="https://github.com/numpy/numpy">github<wbr>.com<wbr>/numpy<wbr>/numpy</a></span> </li></ul>
</div></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Written in</th><td class="infobox-data"><a href="Python_(programming_language)" title="Python (programming language)">Python</a>, <a href="C_(programming_language)" title="C (programming language)">C</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Operating_system" title="Operating system">Operating system</a></th><td class="infobox-data"><a href="Cross-platform" class="mw-redirect" title="Cross-platform">Cross-platform</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_categories#Categorization_approaches" title="Software categories">Type</a></th><td class="infobox-data"><a href="Numerical_analysis" title="Numerical analysis">Numerical analysis</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_license" title="Software license">License</a></th><td class="infobox-data"><a href="BSD_licenses" title="BSD licenses">BSD</a><sup id="cite_ref-numpy_org_2-0" class="reference"><a href="#cite_note-numpy_org-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Website</th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="https://numpy.org/">numpy<wbr>.org</a></span> <span class="penicon autoconfirmed-show"></span></td></tr></tbody></table>
<p><b>NumPy</b> (pronounced <span class="rt-commentedText nowrap"><span class="IPA nopopups noexcerpt" lang="en-fonipa">/<span style="border-bottom:1px dotted"><span title="/ˈ/: primary stress follows">ˈ</span><span title="'n' in 'nigh'">n</span><span title="/ʌ/: 'u' in 'cut'">ʌ</span><span title="'m' in 'my'">m</span><span title="'p' in 'pie'">p</span><span title="/aɪ/: 'i' in 'tide'">aɪ</span></span>/</span></span> <i title="English pronunciation respelling"><span style="font-size:90%">NUM</span>-py</i>) is a <a href="Library_(computing)" title="Library (computing)">library</a> for the <a href="Python_(programming_language)" title="Python (programming language)">Python programming language</a>, adding support for large, multi-dimensional <a href="Array_data_structure" class="mw-redirect" title="Array data structure">arrays</a> and <a href="Matrix_(mathematics)" title="Matrix (mathematics)">matrices</a>, along with a large collection of <a href="High-level_programming_language" title="High-level programming language">high-level</a> <a href="Mathematics" title="Mathematics">mathematical</a> <a href="Function_(mathematics)" title="Function (mathematics)">functions</a> to operate on these arrays.<sup id="cite_ref-Nature_3-0" class="reference"><a href="#cite_note-Nature-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> The predecessor of NumPy, Numeric, was originally created by <a href="Jim_Hugunin" title="Jim Hugunin">Jim Hugunin</a> with contributions from several other developers. In 2005, <a href="Travis_Oliphant" title="Travis Oliphant">Travis Oliphant</a> created NumPy by incorporating features of the competing Numarray into Numeric, with extensive modifications. NumPy is <a href="Open-source_software" title="Open-source software">open-source software</a> and has many contributors. NumPy is fiscally sponsored by NumFOCUS.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<div class="mw-heading mw-heading3"><h3 id="matrix-sig">matrix-sig</h3></div>
<p>The Python programming language was not originally designed for numerical computing, but attracted the attention of the scientific and engineering community early on. In 1995 the <a href="Special_interest_group" title="Special interest group">special interest group</a> (SIG) <i>matrix-sig</i> was founded with the aim of defining an <a href="Array_data_type" class="mw-redirect" title="Array data type">array</a> computing package; among its members was Python designer and maintainer <a href="Guido_van_Rossum" title="Guido van Rossum">Guido van Rossum</a>, who extended <a href="Python_syntax_and_semantics" title="Python syntax and semantics">Python's syntax</a> (in particular the indexing syntax<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>) to make <a href="Array_programming" title="Array programming">array computing</a> easier.<sup id="cite_ref-millman_6-0" class="reference"><a href="#cite_note-millman-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Numeric">Numeric</h3></div>
<p>An implementation of a matrix package was completed by Jim Fulton, then generalized by Jim Hugunin and called <i>Numeric</i><sup id="cite_ref-millman_6-1" class="reference"><a href="#cite_note-millman-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> (also variously known as the "Numerical Python extensions" or "NumPy"), with influences from the <a href="APL_(programming_language)" title="APL (programming language)">APL</a> family of languages, Basis, <a href="MATLAB" title="MATLAB">MATLAB</a>, <a href="FORTRAN" class="mw-redirect" title="FORTRAN">FORTRAN</a>, <a href="S_(programming_language)" title="S (programming language)">S</a> and <a href="S-PLUS" title="S-PLUS">S+</a>, and others.<sup id="cite_ref-cise2_7-0" class="reference"><a href="#cite_note-cise2-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-numerical_8-0" class="reference"><a href="#cite_note-numerical-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
Hugunin, a graduate student at the <a href="Massachusetts_Institute_of_Technology" title="Massachusetts Institute of Technology">Massachusetts Institute of Technology</a> (MIT),<sup id="cite_ref-numerical_8-1" class="reference"><a href="#cite_note-numerical-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 10">: 10 </span></sup> joined the <a href="Corporation_for_National_Research_Initiatives" title="Corporation for National Research Initiatives">Corporation for National Research Initiatives</a> (CNRI) in 1997 to work on <a href="Jython" title="Jython">JPython</a>,<sup id="cite_ref-millman_6-2" class="reference"><a href="#cite_note-millman-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> leaving Paul Dubois of <a href="Lawrence_Livermore_National_Laboratory" title="Lawrence Livermore National Laboratory">Lawrence Livermore National Laboratory</a> (LLNL) to take over as maintainer.<sup id="cite_ref-numerical_8-2" class="reference"><a href="#cite_note-numerical-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 10">: 10 </span></sup> Other early contributors include David Ascher, Konrad Hinsen and <a href="Travis_Oliphant" title="Travis Oliphant">Travis Oliphant</a>.<sup id="cite_ref-numerical_8-3" class="reference"><a href="#cite_note-numerical-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 10">: 10 </span></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Numarray">Numarray</h3></div>
<p>A new package called <i>Numarray</i> was written as a more flexible replacement for Numeric.<sup id="cite_ref-cise_9-0" class="reference"><a href="#cite_note-cise-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> Like Numeric, it too is now deprecated.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-NumPyBook_11-0" class="reference"><a href="#cite_note-NumPyBook-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> Numarray had faster operations for large arrays, but was slower than Numeric on small ones,<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> so for a time both packages were used in parallel for different use cases. The last version of Numeric (v24.2) was released on 11 November 2005, while the last version of numarray (v1.5.2) was released on 24 August 2006.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
</p><p>There was a desire to get Numeric into the Python standard library, but Guido van Rossum decided that the code was not maintainable in its state then.<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="NumPy">NumPy</h3></div>
<p>In early 2005, NumPy developer Travis Oliphant wanted to unify the community around a single array package and ported Numarray's features to Numeric, releasing the result as NumPy 1.0 in 2006.<sup id="cite_ref-cise_9-1" class="reference"><a href="#cite_note-cise-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> This new project was part of <a href="SciPy" title="SciPy">SciPy</a>. To avoid installing the large SciPy package just to get an array object, this new package was separated and called NumPy. Support for Python 3 was added in 2011 with NumPy version 1.5.0.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup>
</p><p>In 2011, <a href="PyPy" title="PyPy">PyPy</a> started development on an implementation of the NumPy API for PyPy.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> As of 2023, it is not yet fully compatible with NumPy.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Features">Features</h2></div>
<p>NumPy targets the <a href="CPython" title="CPython">CPython</a> <a href="Reference_implementation" title="Reference implementation">reference implementation</a> of Python, which is a non-optimizing <a href="Bytecode" title="Bytecode">bytecode</a> <a href="Interpreter_(computing)" title="Interpreter (computing)">interpreter</a>. <a href="List_of_algorithms#Computational_mathematics" title="List of algorithms">Mathematical algorithms</a> written for this version of Python often run much slower than <a href="Compiler" title="Compiler">compiled</a> equivalents due to the absence of compiler optimization. NumPy addresses the slowness problem partly by providing multidimensional arrays and functions and operators that operate efficiently on arrays; using these requires rewriting some code, mostly <a href="Inner_loop" title="Inner loop">inner loops</a>, using NumPy.
</p><p>Using NumPy in Python gives functionality comparable to <a href="MATLAB" title="MATLAB">MATLAB</a> since they are both interpreted,<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> and they both allow the user to write fast programs as long as most operations work on <a href="Array" title="Array">arrays</a> or matrices instead of <a href="Scalar_(computing)" class="mw-redirect" title="Scalar (computing)">scalars</a>. In comparison, MATLAB boasts a large number of additional toolboxes, notably <a href="Simulink" title="Simulink">Simulink</a>, whereas NumPy is intrinsically integrated with Python, a more modern and complete <a href="Programming_language" title="Programming language">programming language</a>. Moreover, complementary Python packages are available; SciPy is a library that adds more MATLAB-like functionality and <a href="Matplotlib" title="Matplotlib">Matplotlib</a> is a <a href="Plot_(graphics)" title="Plot (graphics)">plotting</a> package that provides MATLAB-like plotting functionality. Although matlab can perform sparse matrix operations, numpy alone cannot perform such operations and requires the use of the scipy.sparse library. Internally, both MATLAB and NumPy rely on <a href="Basic_Linear_Algebra_Subprograms" title="Basic Linear Algebra Subprograms">BLAS</a> and <a href="LAPACK" title="LAPACK">LAPACK</a> for efficient <a href="Linear_algebra" title="Linear algebra">linear algebra</a> computations.
</p><p>Python <a href="Language_binding" title="Language binding">bindings</a> of the widely used <a href="Computer_vision" title="Computer vision">computer vision</a> library <a href="OpenCV" title="OpenCV">OpenCV</a> utilize NumPy arrays to store and operate on data.
Since images with multiple channels are simply represented as three-dimensional arrays, indexing, <a href="Array_slicing#1991:_Python" title="Array slicing">slicing</a> or <a href="Mask_(computing)#Image_masks" title="Mask (computing)">masking</a> with other arrays are very efficient ways to access specific pixels of an image.
The NumPy array as universal data structure in OpenCV for images, extracted <a href="Interest_point_detection" class="mw-redirect" title="Interest point detection">feature points</a>, <a href="Kernel_(image_processing)" title="Kernel (image processing)">filter kernels</a> and many more vastly simplifies the programming workflow and <a href="Debugger" title="Debugger">debugging</a>.
</p><p>Importantly, many NumPy operations release the <a href="Global_interpreter_lock" title="Global interpreter lock">global interpreter lock</a>, which allows for multithreaded processing.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup>
</p><p>NumPy also provides a C API, which allows Python code to interoperate with external libraries written in low-level languages.<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="The_ndarray_data_structure">The ndarray data structure</h3></div>
<p>The core functionality of NumPy is its "ndarray", for <i>n</i>-dimensional array, <a href="Data_structure" title="Data structure">data structure</a>. These arrays are <a href="Stride_of_an_array" title="Stride of an array">strided</a> views on memory.<sup id="cite_ref-cise_9-2" class="reference"><a href="#cite_note-cise-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> In contrast to Python's built-in list data structure, these arrays are homogeneously typed: all elements of a single array must be of the same type.
</p><p>Such arrays can also be views into memory buffers allocated by <a href="C_(programming_language)" title="C (programming language)">C</a>/<a href="C%2B%2B" title="C++">C++</a>, <a href="Python_(programming_language)" title="Python (programming language)">Python</a>, and <a href="Fortran" title="Fortran">Fortran</a> extensions to the CPython interpreter without the need to copy data around, giving a degree of compatibility with existing numerical libraries. This functionality is exploited by the SciPy package, which wraps a number of such libraries (notably BLAS and LAPACK). NumPy has built-in support for <a href="Memory-mapped_file" title="Memory-mapped file">memory-mapped</a> ndarrays.<sup id="cite_ref-cise_9-3" class="reference"><a href="#cite_note-cise-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Limitations">Limitations</h3></div>
<p>Inserting or appending entries to an array is not as trivially possible as it is with Python's lists.
The <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">np.pad(...)</code> routine to extend arrays actually creates new arrays of the desired shape and padding values, copies the given array into the new one and returns it.
NumPy's <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">np.concatenate([a1,a2])</code> operation does not actually link the two arrays but returns a new one, filled with the entries from both given arrays in sequence.
Reshaping the dimensionality of an array with <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">np.reshape(...)</code> is only possible as long as the number of elements in the array does not change.
These circumstances originate from the fact that NumPy's arrays must be views on contiguous <a href="Data_buffer" title="Data buffer">memory buffers</a>.
</p><p><a href="Algorithm" title="Algorithm">Algorithms</a> that are not expressible as a vectorized operation will typically run slowly because they must be implemented in "pure Python", while vectorization may increase <a href="Space_complexity" title="Space complexity">memory complexity</a> of some operations from constant to linear, because temporary arrays must be created that are as large as the inputs. Runtime compilation of numerical code has been implemented by several groups to avoid these problems; open source solutions that interoperate with NumPy include numexpr<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup> and <a href="Numba" title="Numba">Numba</a>.<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> Cython and Pythran are static-compiling alternatives to these.
</p><p>Many modern <a href="Big_data" title="Big data">large-scale</a> scientific computing applications have requirements that exceed the capabilities of the NumPy arrays.
For example, NumPy arrays are usually loaded into a computer's <a href="Volatile_memory" title="Volatile memory">memory</a>, which might have insufficient capacity for the analysis of large <a href="Data_set" title="Data set">datasets</a>.
Further, NumPy operations are executed on a single <a href="Central_processing_unit" title="Central processing unit">CPU</a>.
However, many linear algebra operations can be accelerated by executing them on <a href="Computer_cluster" title="Computer cluster">clusters</a> of CPUs or of specialized hardware, such as <a href="Graphics_processing_unit" title="Graphics processing unit">GPUs</a> and <a href="Tensor_Processing_Unit" title="Tensor Processing Unit">TPUs</a>, which many <a href="Deep_learning" title="Deep learning">deep learning</a> applications rely on.
As a result, several alternative array implementations have arisen in the scientific python ecosystem over the recent years, such as <a href="Dask_(software)" title="Dask (software)">Dask</a> for distributed arrays and <a href="TensorFlow" title="TensorFlow">TensorFlow</a> or <a href="Google_JAX" class="mw-redirect" title="Google JAX">JAX</a><sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> for computations on GPUs.
Because of its popularity, these often implement a <a href="Subset" title="Subset">subset</a> of NumPy's <a href="API" title="API">API</a> or mimic it, so that users can change their array implementation with minimal changes to their code required.<sup id="cite_ref-Nature_3-1" class="reference"><a href="#cite_note-Nature-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> A library named <a href="CuPy" title="CuPy">CuPy</a>,<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup> accelerated by <a href="Nvidia" title="Nvidia">Nvidia</a>'s <a href="CUDA" title="CUDA">CUDA</a> framework, has also shown potential for faster computing, being a '<a href="Drop-in_replacement" title="Drop-in replacement">drop-in replacement</a>' of NumPy.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Examples">Examples</h2></div>
<div class="mw-highlight mw-highlight-lang-numpy mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">numpy.random</span><span class="w"> </span><span class="kn">import</span> <span class="n">rand</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">numpy.linalg</span><span class="w"> </span><span class="kn">import</span> <span class="kp">solve</span><span class="p">,</span> <span class="kp">inv</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">array</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">],</span> <span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">],</span> <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">]])</span>
<span class="n">a</span><span class="o">.</span><span class="kp">transpose</span><span class="p">()</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Basic_operations">Basic operations</h3></div>
<div class="mw-highlight mw-highlight-lang-numpy mw-content-ltr" dir="ltr"><pre><span class="o">>>></span> <span class="n">a</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">array</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">])</span>
<span class="o">>>></span> <span class="n">b</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="c1"># create an array with four equally spaced points starting with 0 and ending with 2.</span>
<span class="o">>>></span> <span class="n">c</span> <span class="o">=</span> <span class="n">a</span> <span class="o">-</span> <span class="n">b</span>
<span class="o">>>></span> <span class="n">c</span>
<span class="kp">array</span><span class="p">([</span> <span class="mf">1.</span> <span class="p">,</span> <span class="mf">1.33333333</span><span class="p">,</span> <span class="mf">1.66666667</span><span class="p">,</span> <span class="mf">4.</span> <span class="p">])</span>
<span class="o">>>></span> <span class="n">a</span><span class="o">**</span><span class="mi">2</span>
<span class="kp">array</span><span class="p">([</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">36</span><span class="p">])</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Universal_functions">Universal functions</h3></div>
<div class="mw-highlight mw-highlight-lang-numpy mw-content-ltr" dir="ltr"><pre><span class="o">>>></span> <span class="n">a</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">linspace</span><span class="p">(</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
<span class="o">>>></span> <span class="n">b</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">sin</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="o">>>></span> <span class="n">c</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">cos</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="o">>>></span>
<span class="o">>>></span> <span class="c1"># Functions can take both numbers and arrays as parameters.</span>
<span class="o">>>></span> <span class="n">np</span><span class="o">.</span><span class="kp">sin</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="mf">0.8414709848078965</span>
<span class="o">>>></span> <span class="n">np</span><span class="o">.</span><span class="kp">sin</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="kp">array</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]))</span>
<span class="kp">array</span><span class="p">([</span><span class="mf">0.84147098</span><span class="p">,</span> <span class="mf">0.90929743</span><span class="p">,</span> <span class="mf">0.14112001</span><span class="p">])</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Linear_algebra">Linear algebra</h3></div>
<div class="mw-highlight mw-highlight-lang-numpy mw-content-ltr" dir="ltr"><pre><span class="o">>>></span> <span class="kn">from</span><span class="w"> </span><span class="nn">numpy.random</span><span class="w"> </span><span class="kn">import</span> <span class="n">rand</span>
<span class="o">>>></span> <span class="kn">from</span><span class="w"> </span><span class="nn">numpy.linalg</span><span class="w"> </span><span class="kn">import</span> <span class="kp">solve</span><span class="p">,</span> <span class="kp">inv</span>
<span class="o">>>></span> <span class="n">a</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">array</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span> <span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mf">6.7</span><span class="p">],</span> <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mf">9.0</span><span class="p">,</span> <span class="mi">5</span><span class="p">]])</span>
<span class="o">>>></span> <span class="n">a</span><span class="o">.</span><span class="kp">transpose</span><span class="p">()</span>
<span class="kp">array</span><span class="p">([[</span> <span class="mf">1.</span> <span class="p">,</span> <span class="mf">3.</span> <span class="p">,</span> <span class="mf">5.</span> <span class="p">],</span>
<span class="p">[</span> <span class="mf">2.</span> <span class="p">,</span> <span class="mf">4.</span> <span class="p">,</span> <span class="mf">9.</span> <span class="p">],</span>
<span class="p">[</span> <span class="mf">3.</span> <span class="p">,</span> <span class="mf">6.7</span><span class="p">,</span> <span class="mf">5.</span> <span class="p">]])</span>
<span class="o">>>></span> <span class="kp">inv</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="kp">array</span><span class="p">([[</span><span class="o">-</span><span class="mf">2.27683616</span><span class="p">,</span> <span class="mf">0.96045198</span><span class="p">,</span> <span class="mf">0.07909605</span><span class="p">],</span>
<span class="p">[</span> <span class="mf">1.04519774</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.56497175</span><span class="p">,</span> <span class="mf">0.1299435</span> <span class="p">],</span>
<span class="p">[</span> <span class="mf">0.39548023</span><span class="p">,</span> <span class="mf">0.05649718</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.11299435</span><span class="p">]])</span>
<span class="o">>>></span> <span class="n">b</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">array</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="o">>>></span> <span class="kp">solve</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span> <span class="c1"># solve the equation ax = b</span>
<span class="kp">array</span><span class="p">([</span><span class="o">-</span><span class="mf">4.83050847</span><span class="p">,</span> <span class="mf">2.13559322</span><span class="p">,</span> <span class="mf">1.18644068</span><span class="p">])</span>
<span class="o">>>></span> <span class="n">c</span> <span class="o">=</span> <span class="n">rand</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="o">*</span> <span class="mi">20</span> <span class="c1"># create a 3x3 random matrix of values within [0,1] scaled by 20</span>
<span class="o">>>></span> <span class="n">c</span>
<span class="kp">array</span><span class="p">([[</span> <span class="mf">3.98732789</span><span class="p">,</span> <span class="mf">2.47702609</span><span class="p">,</span> <span class="mf">4.71167924</span><span class="p">],</span>
<span class="p">[</span> <span class="mf">9.24410671</span><span class="p">,</span> <span class="mf">5.5240412</span> <span class="p">,</span> <span class="mf">10.6468792</span> <span class="p">],</span>
<span class="p">[</span> <span class="mf">10.38136661</span><span class="p">,</span> <span class="mf">8.44968437</span><span class="p">,</span> <span class="mf">15.17639591</span><span class="p">]])</span>
<span class="o">>>></span> <span class="n">np</span><span class="o">.</span><span class="kp">dot</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> <span class="c1"># matrix multiplication</span>
<span class="kp">array</span><span class="p">([[</span> <span class="mf">53.61964114</span><span class="p">,</span> <span class="mf">38.8741616</span> <span class="p">,</span> <span class="mf">71.53462537</span><span class="p">],</span>
<span class="p">[</span> <span class="mf">118.4935668</span> <span class="p">,</span> <span class="mf">86.14012835</span><span class="p">,</span> <span class="mf">158.40440712</span><span class="p">],</span>
<span class="p">[</span> <span class="mf">155.04043289</span><span class="p">,</span> <span class="mf">104.3499231</span> <span class="p">,</span> <span class="mf">195.26228855</span><span class="p">]])</span>
<span class="o">>>></span> <span class="n">a</span> <span class="o">@</span> <span class="n">c</span> <span class="c1"># Starting with Python 3.5 and NumPy 1.10</span>
<span class="kp">array</span><span class="p">([[</span> <span class="mf">53.61964114</span><span class="p">,</span> <span class="mf">38.8741616</span> <span class="p">,</span> <span class="mf">71.53462537</span><span class="p">],</span>
<span class="p">[</span> <span class="mf">118.4935668</span> <span class="p">,</span> <span class="mf">86.14012835</span><span class="p">,</span> <span class="mf">158.40440712</span><span class="p">],</span>
<span class="p">[</span> <span class="mf">155.04043289</span><span class="p">,</span> <span class="mf">104.3499231</span> <span class="p">,</span> <span class="mf">195.26228855</span><span class="p">]])</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Multidimensional_arrays">Multidimensional arrays</h3></div>
<div class="mw-highlight mw-highlight-lang-numpy mw-content-ltr" dir="ltr"><pre><span class="o">>>></span> <span class="n">M</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">zeros</span><span class="p">(</span><span class="kp">shape</span><span class="o">=</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">11</span><span class="p">))</span>
<span class="o">>>></span> <span class="n">T</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">transpose</span><span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<span class="o">>>></span> <span class="n">T</span><span class="o">.</span><span class="kp">shape</span>
<span class="p">(</span><span class="mi">11</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Incorporation_with_OpenCV">Incorporation with OpenCV</h3></div>
<div class="mw-highlight mw-highlight-lang-numpy mw-content-ltr" dir="ltr"><pre><span class="o">>>></span> <span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
<span class="o">>>></span> <span class="kn">import</span><span class="w"> </span><span class="nn">cv2</span>
<span class="o">>>></span> <span class="n">r</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">reshape</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="kp">arange</span><span class="p">(</span><span class="mi">256</span><span class="o">*</span><span class="mi">256</span><span class="p">)</span><span class="o">%</span><span class="mi">256</span><span class="p">,(</span><span class="mi">256</span><span class="p">,</span><span class="mi">256</span><span class="p">))</span> <span class="c1"># 256x256 pixel array with a horizontal gradient from 0 to 255 for the red color channel</span>
<span class="o">>>></span> <span class="n">g</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">zeros_like</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="c1"># array of same size and type as r but filled with 0s for the green color channel</span>
<span class="o">>>></span> <span class="n">b</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">T</span> <span class="c1"># transposed r will give a vertical gradient for the blue color channel</span>
<span class="o">>>></span> <span class="n">cv2</span><span class="o">.</span><span class="n">imwrite</span><span class="p">(</span><span class="s2">"gradients.png"</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="kp">dstack</span><span class="p">([</span><span class="n">b</span><span class="p">,</span><span class="n">g</span><span class="p">,</span><span class="n">r</span><span class="p">]))</span> <span class="c1"># OpenCV images are interpreted as BGR, the depth-stacked array will be written to an 8bit RGB PNG-file called "gradients.png"</span>
<span class="kc">True</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Nearest-neighbor_search">Nearest-neighbor search</h3></div>
<p>Functional Python and vectorized NumPy version.
</p>
<div class="mw-highlight mw-highlight-lang-numpy mw-content-ltr" dir="ltr"><pre><span class="o">>>></span> <span class="c1"># # # Functional Python # # #</span>
<span class="o">>>></span> <span class="n">points</span> <span class="o">=</span> <span class="p">[[</span><span class="mi">9</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">8</span><span class="p">],[</span><span class="mi">4</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">2</span><span class="p">],[</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">4</span><span class="p">],[</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="mi">9</span><span class="p">],[</span><span class="mi">5</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">7</span><span class="p">],[</span><span class="mi">8</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">7</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="p">],[</span><span class="mi">7</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">0</span><span class="p">],[</span><span class="mi">6</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">],[</span><span class="mi">2</span><span class="p">,</span><span class="mi">9</span><span class="p">,</span><span class="mi">6</span><span class="p">]]</span>
<span class="o">>>></span> <span class="n">qPoint</span> <span class="o">=</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span>
<span class="o">>>></span> <span class="n">edistance</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">:</span> <span class="nb">sum</span><span class="p">((</span><span class="n">a1</span><span class="o">-</span><span class="n">b1</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="k">for</span> <span class="n">a1</span><span class="p">,</span><span class="n">b1</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">))</span><span class="o">**</span><span class="mf">0.5</span> <span class="c1"># Lambda function for calculating the Euclidean distance of two vectors</span>
<span class="o">>>></span> <span class="n">nearest</span> <span class="o">=</span> <span class="nb">min</span><span class="p">((</span><span class="n">edistance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="n">qpoint</span><span class="p">),</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">points</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="c1"># Compute all Euclidean distances at once and return the nearest point</span>
<span class="o">>>></span> <span class="nb">print</span><span class="p">(</span><span class="s2">"Nearest point to q: "</span><span class="p">,</span><span class="n">nearest</span><span class="p">)</span>
<span class="n">Nearest</span> <span class="n">point</span> <span class="n">to</span> <span class="n">q</span><span class="p">:</span> <span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">4</span><span class="p">]</span>
<span class="o">>>></span> <span class="c1"># # # Equivalent NumPy vectorization # # #</span>
<span class="o">>>></span> <span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
<span class="o">>>></span> <span class="n">points</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">array</span><span class="p">([[</span><span class="mi">9</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">8</span><span class="p">],[</span><span class="mi">4</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">2</span><span class="p">],[</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">4</span><span class="p">],[</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="mi">9</span><span class="p">],[</span><span class="mi">5</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">7</span><span class="p">],[</span><span class="mi">8</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">7</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="p">],[</span><span class="mi">7</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">0</span><span class="p">],[</span><span class="mi">6</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">],[</span><span class="mi">2</span><span class="p">,</span><span class="mi">9</span><span class="p">,</span><span class="mi">6</span><span class="p">]])</span>
<span class="o">>>></span> <span class="n">qPoint</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">array</span><span class="p">([</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="o">>>></span> <span class="n">minIdx</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">argmin</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span><span class="n">points</span><span class="o">-</span><span class="n">qPoint</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span> <span class="c1"># compute all euclidean distances at once and return the index of the smallest one</span>
<span class="o">>>></span> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Nearest point to q: </span><span class="si">{</span><span class="n">points</span><span class="p">[</span><span class="n">minIdx</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
<span class="n">Nearest</span> <span class="n">point</span> <span class="n">to</span> <span class="n">q</span><span class="p">:</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">4</span><span class="p">]</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="F2PY">F2PY</h3></div>
<p>Quickly wrap native code for faster scripts.<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-highlight mw-highlight-lang-fortran mw-content-ltr" dir="ltr"><pre><span class="c">! Python Fortran native code call example</span>
<span class="c">! f2py -c -m foo *.f90</span>
<span class="c">! Compile Fortran into python named module using intent statements</span>
<span class="c">! Fortran subroutines only not functions--easier than JNI with C wrapper</span>
<span class="c">! requires gfortran and make</span>
<span class="k">subroutine </span><span class="n">ftest</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="n">n</span><span class="p">,</span><span class="w"> </span><span class="n">c</span><span class="p">,</span><span class="w"> </span><span class="n">d</span><span class="p">)</span>
<span class="w"> </span><span class="k">implicit none</span>
<span class="k"> </span><span class="kt">integer</span><span class="p">,</span><span class="w"> </span><span class="k">intent</span><span class="p">(</span><span class="n">in</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="n">n</span>
<span class="w"> </span><span class="kt">integer</span><span class="p">,</span><span class="w"> </span><span class="k">intent</span><span class="p">(</span><span class="n">out</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">c</span><span class="p">,</span><span class="w"> </span><span class="n">d</span>
<span class="w"> </span><span class="kt">integer</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">i</span>
<span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
<span class="w"> </span><span class="k">do </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">n</span>
<span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">c</span>
<span class="w"> </span><span class="k">end do</span>
<span class="k"> </span><span class="n">d</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">c</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">end subroutine </span><span class="n">ftest</span>
</pre></div>
<div class="mw-highlight mw-highlight-lang-pycon mw-content-ltr" dir="ltr"><pre><span class="gp">>>> </span><span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
<span class="gp">>>> </span><span class="kn">import</span><span class="w"> </span><span class="nn">foo</span>
<span class="gp">>>> </span><span class="n">a</span> <span class="o">=</span> <span class="n">foo</span><span class="o">.</span><span class="n">ftest</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="c1"># or c,d = instead of a.c and a.d</span>
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="go">(9,-27)</span>
<span class="gp">>>> </span><span class="n">help</span><span class="p">(</span><span class="s2">"foo.ftest"</span><span class="p">)</span> <span class="c1"># foo.ftest.__doc__</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Array_programming" title="Array programming">Array programming</a></li>
<li><a href="List_of_numerical-analysis_software" title="List of numerical-analysis software">List of numerical-analysis software</a></li>
<li><a href="Theano_(software)" title="Theano (software)">Theano (software)</a></li>
<li><a href="Matplotlib" title="Matplotlib">Matplotlib</a></li>
<li><a href="Fortran" title="Fortran">Fortran</a></li>
<li><a href="Row-_and_column-major_order" title="Row- and column-major order">Row- and column-major order</a></li>
<li><a href="F2c" title="F2c">f2c</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width reflist-columns-2">
<ol class="references">
<li id="cite_note-wikidata-0427ffff1a2533c64493114ae899e678d4820b54-v20-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-wikidata-0427ffff1a2533c64493114ae899e678d4820b54-v20_1-0">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/numpy/numpy/releases/tag/v2.3.1">"Release 2.3.1"</a>. 21 June 2025<span class="reference-accessdate">. Retrieved <span class="nowrap">15 July</span> 2025</span>.</cite></span>
</li>
<li id="cite_note-numpy_org-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-numpy_org_2-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://numpy.org/">"NumPy — NumPy"</a>. <i>numpy.org</i>. NumPy developers.</cite></span>
</li>
<li id="cite_note-Nature-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-Nature_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Nature_3-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFCharles_R_HarrisK._Jarrod_MillmanStéfan_J._van_der_WaltRalf_Gommers2020" class="citation journal cs1">Charles R Harris; K. Jarrod Millman; Stéfan J. van der Walt; et al. (16 September 2020). <a rel="nofollow" class="external text" href="https://www.nature.com/articles/s41586-020-2649-2.pdf">"Array programming with NumPy"</a> <span class="cs1-format">(PDF)</span>. <i><a href="Nature_(journal)" title="Nature (journal)">Nature</a></i>. <b>585</b> (7825): <span class="nowrap">357–</span>362. <a href="ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/2006.10256">2006.10256</a></span>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1038%2FS41586-020-2649-2">10.1038/S41586-020-2649-2</a>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/1476-4687">1476-4687</a>. <a href="PMC_(identifier)" class="mw-redirect" title="PMC (identifier)">PMC</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7759461">7759461</a></span>. <a href="PMID_(identifier)" class="mw-redirect" title="PMID (identifier)">PMID</a> <a rel="nofollow" class="external text" href="https://pubmed.ncbi.nlm.nih.gov/32939066">32939066</a>. <a href="WDQ_(identifier)" class="mw-redirect" title="WDQ (identifier)">Wikidata</a> <a href="https://www.wikidata.org/wiki/Q99413970" class="extiw external" title="d:Q99413970">Q99413970</a>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://numfocus.org/sponsored-projects">"NumFOCUS Sponsored Projects"</a>. NumFOCUS<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-10-25</span></span>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://numpy.org/doc/stable/reference/arrays.indexing.html">"Indexing — NumPy v1.20 Manual"</a>. <i>numpy.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-04-06</span></span>.</cite></span>
</li>
<li id="cite_note-millman-6"><span class="mw-cite-backlink">^ <a href="#cite_ref-millman_6-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-millman_6-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-millman_6-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFMillmanAivazis2011" class="citation journal cs1">Millman, K. Jarrod; Aivazis, Michael (2011). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20190219031439/https://www.computer.org/csdl/mags/cs/2011/02/mcs2011020009.html">"Python for Scientists and Engineers"</a>. <i>Computing in Science and Engineering</i>. <b>13</b> (2): <span class="nowrap">9–</span>12. <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2011CSE....13b...9M">2011CSE....13b...9M</a>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FMCSE.2011.36">10.1109/MCSE.2011.36</a>. Archived from <a rel="nofollow" class="external text" href="http://www.computer.org/csdl/mags/cs/2011/02/mcs2011020009.html">the original</a> on 2019-02-19<span class="reference-accessdate">. Retrieved <span class="nowrap">2014-07-07</span></span>.</cite></span>
</li>
<li id="cite_note-cise2-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-cise2_7-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFTravis_Oliphant2007" class="citation journal cs1">Travis Oliphant (2007). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20131014035918/http://www.vision.ime.usp.br/~thsant/pool/oliphant-python_scientific.pdf">"Python for Scientific Computing"</a> <span class="cs1-format">(PDF)</span>. <i>Computing in Science and Engineering</i>. Archived from <a rel="nofollow" class="external text" href="http://www.vision.ime.usp.br/~thsant/pool/oliphant-python_scientific.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2013-10-14<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-10-12</span></span>.</cite></span>
</li>
<li id="cite_note-numerical-8"><span class="mw-cite-backlink">^ <a href="#cite_ref-numerical_8-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-numerical_8-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-numerical_8-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-numerical_8-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFDavid_AscherPaul_F._DuboisKonrad_HinsenJim_Hugunin1999" class="citation web cs1">David Ascher; Paul F. Dubois; Konrad Hinsen; Jim Hugunin; Travis Oliphant (1999). <a rel="nofollow" class="external text" href="http://www.cs.mcgill.ca/~hv/articles/Numerical/numpy.pdf">"Numerical Python"</a> <span class="cs1-format">(PDF)</span>.</cite></span>
</li>
<li id="cite_note-cise-9"><span class="mw-cite-backlink">^ <a href="#cite_ref-cise_9-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-cise_9-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-cise_9-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-cise_9-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFvan_der_WaltColbertVaroquaux2011" class="citation journal cs1">van der Walt, Stéfan; Colbert, S. Chris; Varoquaux, Gaël (2011). "The NumPy array: a structure for efficient numerical computation". <i>Computing in Science and Engineering</i>. <b>13</b> (2). IEEE: 22. <a href="ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/1102.1523">1102.1523</a></span>. <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2011CSE....13b..22V">2011CSE....13b..22V</a>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FMCSE.2011.37">10.1109/MCSE.2011.37</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:16907816">16907816</a>.</cite></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.stsci.edu/resources/software_hardware/numarray">"Numarray Homepage"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2006-06-24</span></span>.</cite></span>
</li>
<li id="cite_note-NumPyBook-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-NumPyBook_11-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFTravis_E._Oliphant2006" class="citation book cs1">Travis E. Oliphant (7 December 2006). <a rel="nofollow" class="external text" href="https://archive.org/details/NumPyBook"><i>Guide to NumPy</i></a><span class="reference-accessdate">. Retrieved <span class="nowrap">2 February</span> 2017</span>.</cite></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><cite id="CITEREFTravis_Oliphant_and_other_SciPy_developers" class="citation web cs1">Travis Oliphant and other SciPy developers. <a rel="nofollow" class="external text" href="https://mail.scipy.org/pipermail/numpy-discussion/2004-January/002645.html">"[Numpy-discussion] Status of Numeric"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2 February</span> 2017</span>.</cite></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://sourceforge.net/project/showfiles.php?group_id=1369">"NumPy Sourceforge Files"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2008-03-24</span></span>.</cite></span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://scipy.github.io/old-wiki/pages/History_of_SciPy.html">"History_of_SciPy - SciPy wiki dump"</a>. <i>scipy.github.io</i>.</cite></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://sourceforge.net/projects/numpy/files//NumPy/1.5.0/NOTES.txt/view">"NumPy 1.5.0 Release Notes"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2011-04-29</span></span>.</cite></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://morepypy.blogspot.com/2011/10/numpy-funding-and-status-update.html">"PyPy Status Blog: NumPy funding and status update"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2011-12-22</span></span>.</cite></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://buildbot.pypy.org/numpy-status/latest.html">"NumPyPy Status"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-12-19</span></span>.</cite></span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><cite id="CITEREFThe_SciPy_Community" class="citation web cs1">The SciPy Community. <a rel="nofollow" class="external text" href="https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html">"NumPy for Matlab users"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2 February</span> 2017</span>.</cite></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://numpy.org/doc/stable/release/1.9.0-notes.html">"numpy release notes"</a>.</cite></span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><cite id="CITEREFMcKinney2014" class="citation book cs1">McKinney, Wes (2014). "NumPy Basics: Arrays and Vectorized Computation". <i>Python for Data Analysis</i> (First Edition, Third release ed.). O'Reilly. p. 79. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-449-31979-3</bdi>.</cite></span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><cite id="CITEREFFrancesc_Alted" class="citation web cs1">Francesc Alted. <a rel="nofollow" class="external text" href="https://github.com/pydata/numexpr">"numexpr"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">8 March</span> 2014</span>.</cite></span>
</li>
<li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://numba.pydata.org/">"Numba"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">8 March</span> 2014</span>.</cite></span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"> Documentationː <span class="url"><a rel="nofollow" class="external text" href="https://jax.readthedocs.io/">jax<wbr>.readthedocs<wbr>.io</a></span> </span>
</li>
<li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><cite class="citation cs2"><a rel="nofollow" class="external text" href="https://www.youtube.com/watch?v=MAz1xolSB68"><i>Shohei Hido - CuPy: A NumPy-compatible Library for GPU - PyCon 2018</i></a>, <a rel="nofollow" class="external text" href="https://ghostarchive.org/varchive/youtube/20211221/MAz1xolSB68">archived</a> from the original on 2021-12-21<span class="reference-accessdate">, retrieved <span class="nowrap">2021-05-11</span></span></cite></span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><cite id="CITEREFEntschev2019" class="citation web cs1">Entschev, Peter Andreas (2019-07-23). <a rel="nofollow" class="external text" href="https://medium.com/rapids-ai/single-gpu-cupy-speedups-ea99cbbb0cbb">"Single-GPU CuPy Speedups"</a>. <i>Medium</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-05-11</span></span>.</cite></span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://numpy.org/doc/stable/f2py/usage.html?highlight=f2py">"F2PY docs from NumPy"</a>. NumPy<span class="reference-accessdate">. Retrieved <span class="nowrap">18 April</span> 2022</span>.</cite></span>
</li>
<li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text"><cite id="CITEREFWorthey2022" class="citation web cs1">Worthey, Guy (3 January 2022). <a rel="nofollow" class="external text" href="https://guyworthey.net/2022/01/03/a-python-vs-fortran-smackdown/">"A python vs. Fortran smackdown"</a>. <i>Guy Worthey</i>. Guy Worthey<span class="reference-accessdate">. Retrieved <span class="nowrap">18 April</span> 2022</span>.</cite></span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text"><cite id="CITEREFShell" class="citation web cs1">Shell, Scott. <a rel="nofollow" class="external text" href="https://sites.engineering.ucsb.edu/~shell/che210d/f2py.pdf">"Writing fast Fortran routines for Python"</a> <span class="cs1-format">(PDF)</span>. <i>UCSB Engineering Department</i>. University of California, Santa Barbara<span class="reference-accessdate">. Retrieved <span class="nowrap">18 April</span> 2022</span>.</cite></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="Further_reading">Further reading</h2></div>
<ul><li><cite id="CITEREFMcKinney2022" class="citation book cs1">McKinney, Wes (2022). <a rel="nofollow" class="external text" href="https://wesmckinney.com/book/"><i>Python for Data Analysis</i></a> (3rd ed.). O'Reilly. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1098104030</bdi>.</cite></li>
<li><cite id="CITEREFBressert2012" class="citation book cs1">Bressert, Eli (2012). <i>Scipy and Numpy: An Overview for Developers</i>. O'Reilly. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-4493-0546-8</bdi>.</cite></li>
<li><cite id="CITEREFVanderPlas2016" class="citation book cs1">VanderPlas, Jake (2016). "Introduction to NumPy". <i>Python Data Science Handbook: Essential Tools for Working with Data</i>. O'Reilly. pp. <span class="nowrap">33–</span>96. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-4919-1205-8</bdi>.</cite></li></ul>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1290876196">
/* start https://en.wikipedia.org/ */
.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:var(--background-color-interactive-subtle,#f8f9fa);display:flow-root}.mw-parser-output .infobox .side-box{font-size:100%}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1;min-width:0}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1250146164">
/* start https://en.wikipedia.org/ */
.mw-parser-output .sister-box .side-box-abovebelow{padding:0.75em 0;text-align:center}.mw-parser-output .sister-box .side-box-abovebelow>b{display:block}.mw-parser-output .sister-box .side-box-text>ul{border-top:1px solid #aaa;padding:0.75em 0;width:217px;margin:0 auto}.mw-parser-output .sister-box .side-box-text>ul>li{min-height:31px}.mw-parser-output .sister-logo{display:inline-block;width:31px;line-height:31px;vertical-align:middle;text-align:center}.mw-parser-output .sister-link{display:inline-block;margin-left:4px;width:182px;vertical-align:middle}@media print{body.ns-0 .mw-parser-output .sistersitebox{display:none!important}}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-v2.svg"]{background-color:white}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-v2.svg"]{background-color:white}}
/* end https://en.wikipedia.org/ */
</style>
<ul><li><span class="official-website"><span class="url"><a rel="nofollow" class="external text" href="https://numpy.org/">Official website</a></span></span> </li>
<li><a rel="nofollow" class="external text" href="https://numpy.org/numpy-tutorials/">NumPy tutorials</a></li>
<li><a rel="nofollow" class="external text" href="https://scipy.github.io/old-wiki/pages/History_of_SciPy">History of NumPy</a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Scientific_software_in_Python63" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div id="Scientific_software_in_Python63" style="font-size:114%;margin:0 4em">Scientific software in <a href="Python_(programming_language)" title="Python (programming language)">Python</a></div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul>
<li><a href="SciPy" title="SciPy">SciPy</a></li>
<li><a href="Matplotlib" title="Matplotlib">matplotlib</a></li>
<li><a href="Pandas_(software)" title="Pandas (software)">pandas</a></li>
<li><a href="Scikit-learn" title="Scikit-learn">scikit-learn</a></li>
<li><a href="Scikit-image" title="Scikit-image">scikit-image</a></li>
<li><a href="MayaVi" title="MayaVi">MayaVi</a></li>
<li><i>more</i></li></ul>
</div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-07-15" href="https://en.wikipedia.org/wiki/?title=NumPy&oldid=1300597057">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>